{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/think/anaconda3/lib/python3.7/site-packages/numpy/__init__.py:140: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service\n",
      "  from . import _distributor_init\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'1.7.1'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "torch.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import re\n",
    "\n",
    "import cv2\n",
    "import numpy as np\n",
    "# import torch\n",
    "from skimage import io\n",
    "from torch import nn\n",
    "from torchvision import models\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import warnings\n",
    "\n",
    "import mmcv\n",
    "import torch\n",
    "from mmcv import Config, DictAction\n",
    "from mmcv.cnn import fuse_conv_bn\n",
    "from mmcv.parallel import MMDataParallel, MMDistributedDataParallel\n",
    "from mmcv.runner import (get_dist_info, init_dist, load_checkpoint,\n",
    "                         wrap_fp16_model)\n",
    "\n",
    "from mmdet.apis import multi_gpu_test, single_gpu_test\n",
    "from mmdet.datasets import (build_dataloader, build_dataset,\n",
    "                            replace_ImageToTensor)\n",
    "from mmdet.models import build_detector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "cfg = Config.fromfile('work_dirs/faster_rcnn_r101_fpn_48e_coco_data1000_0228/faster_rcnn_r101_fpn_48e_coco_data1000_0228.py')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2021-03-23 17:31:23,554 - mmdet - INFO - load model from: torchvision://resnet101\n",
      "2021-03-23 17:31:23,759 - mmdet - WARNING - The model and loaded state dict do not match exactly\n",
      "\n",
      "unexpected key in source state_dict: fc.weight, fc.bias\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "checkpoint = load_checkpoint(model, 'work_dirs/faster_rcnn_r101_fpn_48e_coco_data1000_0228/epoch_48.pth', map_location='cpu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.CLASSES = checkpoint['meta']['CLASSES']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "FasterRCNN(\n",
       "  (backbone): ResNet(\n",
       "    (conv1): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
       "    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (maxpool): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False)\n",
       "    (layer1): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (layer2): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "          (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (3): Bottleneck(\n",
       "        (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (layer3): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "          (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (3): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (4): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (5): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (6): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (7): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (8): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (9): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (10): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (11): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (12): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (13): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (14): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (15): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (16): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (17): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (18): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (19): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (20): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (21): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (22): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (layer4): ResLayer(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
       "          (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (neck): FPN(\n",
       "    (lateral_convs): ModuleList(\n",
       "      (0): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "      (1): ConvModule(\n",
       "        (conv): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "      (2): ConvModule(\n",
       "        (conv): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "      (3): ConvModule(\n",
       "        (conv): Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "      )\n",
       "    )\n",
       "    (fpn_convs): ModuleList(\n",
       "      (0): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (1): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (2): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (3): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (rpn_head): RPNHead(\n",
       "    (loss_cls): CrossEntropyLoss()\n",
       "    (loss_bbox): L1Loss()\n",
       "    (rpn_conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "    (rpn_cls): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
       "    (rpn_reg): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n",
       "  )\n",
       "  (roi_head): StandardRoIHead(\n",
       "    (bbox_roi_extractor): SingleRoIExtractor(\n",
       "      (roi_layers): ModuleList(\n",
       "        (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "      )\n",
       "    )\n",
       "    (bbox_head): Shared2FCBBoxHead(\n",
       "      (loss_cls): CrossEntropyLoss()\n",
       "      (loss_bbox): L1Loss()\n",
       "      (fc_cls): Linear(in_features=1024, out_features=11, bias=True)\n",
       "      (fc_reg): Linear(in_features=1024, out_features=40, bias=True)\n",
       "      (shared_convs): ModuleList()\n",
       "      (shared_fcs): ModuleList(\n",
       "        (0): Linear(in_features=12544, out_features=1024, bias=True)\n",
       "        (1): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "      )\n",
       "      (cls_convs): ModuleList()\n",
       "      (cls_fcs): ModuleList()\n",
       "      (reg_convs): ModuleList()\n",
       "      (reg_fcs): ModuleList()\n",
       "      (relu): ReLU(inplace=True)\n",
       "    )\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.CLASSES = checkpoint['meta']['CLASSES']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading annotations into memory...\n",
      "Done (t=0.00s)\n",
      "creating index...\n",
      "index created!\n"
     ]
    }
   ],
   "source": [
    "dataset = build_dataset(cfg.data.test)\n",
    "data_loader = build_dataloader(\n",
    "    dataset,\n",
    "    samples_per_gpu=1,\n",
    "    workers_per_gpu=cfg.data.workers_per_gpu,\n",
    "    dist=False,\n",
    "    shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = []\n",
    "for i, t in enumerate(data_loader):\n",
    "    tmp = {}\n",
    "    tmp['img'] = t['img']\n",
    "    tmp['img_metas'] = t['img_metas'][0].data[0]\n",
    "    data.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'img': [tensor([[[[-0.7308, -0.7308, -0.7479,  ...,  1.2899,  1.2899,  1.2899],\n",
       "            [-0.7308, -0.7479, -0.7479,  ...,  1.2899,  1.2899,  1.2899],\n",
       "            [-0.7308, -0.7308, -0.7479,  ...,  1.2728,  1.2899,  1.2899],\n",
       "            ...,\n",
       "            [-0.6794, -0.6452, -0.5938,  ...,  0.9303,  0.9646,  0.9817],\n",
       "            [-0.6452, -0.6281, -0.5938,  ...,  0.9303,  0.9646,  0.9817],\n",
       "            [-0.6281, -0.6109, -0.5938,  ...,  0.9303,  0.9646,  0.9988]],\n",
       "  \n",
       "           [[-0.1450, -0.1625, -0.1625,  ...,  1.4657,  1.4657,  1.4657],\n",
       "            [-0.1450, -0.1625, -0.1625,  ...,  1.4657,  1.4657,  1.4657],\n",
       "            [-0.1450, -0.1450, -0.1625,  ...,  1.4482,  1.4657,  1.4657],\n",
       "            ...,\n",
       "            [-0.2150, -0.1800, -0.1450,  ...,  1.0805,  1.0980,  1.1155],\n",
       "            [-0.1975, -0.1800, -0.1450,  ...,  1.0630,  1.0980,  1.1331],\n",
       "            [-0.1975, -0.1800, -0.1625,  ...,  1.0805,  1.1155,  1.1331]],\n",
       "  \n",
       "           [[-0.4624, -0.4798, -0.4798,  ...,  1.5768,  1.5768,  1.5768],\n",
       "            [-0.4624, -0.4624, -0.4798,  ...,  1.5768,  1.5768,  1.5768],\n",
       "            [-0.4624, -0.4624, -0.4798,  ...,  1.5594,  1.5768,  1.5768],\n",
       "            ...,\n",
       "            [-0.4624, -0.4275, -0.3753,  ...,  1.2457,  1.2805,  1.2980],\n",
       "            [-0.4450, -0.4275, -0.3753,  ...,  1.2631,  1.2980,  1.3154],\n",
       "            [-0.4275, -0.4101, -0.3927,  ...,  1.2631,  1.2980,  1.3154]]]])],\n",
       " 'img_metas': [{'filename': 'data/coco/data0228_train/山东1494987359326-xiaochicun.jpg',\n",
       "   'ori_filename': '山东1494987359326-xiaochicun.jpg',\n",
       "   'ori_shape': (425, 425, 3),\n",
       "   'img_shape': (800, 800, 3),\n",
       "   'pad_shape': (800, 800, 3),\n",
       "   'scale_factor': array([1.882353, 1.882353, 1.882353, 1.882353], dtype=float32),\n",
       "   'flip': False,\n",
       "   'flip_direction': None,\n",
       "   'img_norm_cfg': {'mean': array([123.675, 116.28 , 103.53 ], dtype=float32),\n",
       "    'std': array([58.395, 57.12 , 57.375], dtype=float32),\n",
       "    'to_rgb': True}}]}"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "################################################\n",
    "data[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# cfg.nms_pre = 1000\n",
    "# cfg.min_bbox_size = 1\n",
    "# cfg.nms_thr = 10\n",
    "# cfg.nms_post = 1000\n",
    "test_cfg = model.rpn_head.test_cfg\n",
    "\n",
    "# img_metas = data['img_metas']\n",
    "####################################################################################3\n",
    "# 此處重寫了rpn_head.get_bboxes，因爲原函數使用detach把gradients的backprop刪了無法backward（）\n",
    "#######################################################################################\n",
    "\n",
    "def get_bboxes_tmp(rpn_outs, img_metas, test_cfg):\n",
    "    \n",
    "    with_nms = False\n",
    "    rescale = False\n",
    "    cls_scores = rpn_outs[0]\n",
    "    bbox_preds = rpn_outs[1]\n",
    "\n",
    "    num_levels = len(cls_scores)\n",
    "\n",
    "    device = cls_scores[0].device\n",
    "    featmap_sizes = [cls_scores[i].shape[-2:] for i in range(num_levels)]\n",
    "    mlvl_anchors = model.rpn_head.anchor_generator.grid_anchors(\n",
    "        featmap_sizes, device=device)\n",
    "\n",
    "    result_list = []\n",
    "    for img_id in range(len(img_metas)):\n",
    "        cls_score_list = [\n",
    "            cls_scores[i][img_id] for i in range(num_levels) # 此處不再使用detach()\n",
    "        ]\n",
    "        bbox_pred_list = [\n",
    "            bbox_preds[i][img_id] for i in range(num_levels) # 此處不再使用detach()\n",
    "        ]\n",
    "        img_shape = img_metas[img_id]['img_shape']\n",
    "        scale_factor = img_metas[img_id]['scale_factor']\n",
    "\n",
    "        if with_nms:\n",
    "            # some heads don't support with_nms argument\n",
    "            proposals = model.rpn_head._get_bboxes_single(cls_score_list,\n",
    "                                                bbox_pred_list,\n",
    "                                                mlvl_anchors, img_shape,\n",
    "                                                scale_factor, test_cfg, rescale)\n",
    "        else:\n",
    "            proposals = model.rpn_head._get_bboxes_single(cls_score_list,\n",
    "                                                bbox_pred_list,\n",
    "                                                mlvl_anchors, img_shape,\n",
    "                                                scale_factor, test_cfg, rescale)\n",
    "        result_list.append(proposals)\n",
    "    \n",
    "    return result_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "backbone.conv1 , Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False)\n",
      "backbone.layer1.0.conv1 , Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.0.downsample.0 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.0.conv1 , Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer2.0.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.0.downsample.0 , Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
      "backbone.layer2.1.conv1 , Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer2.1.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.2.conv1 , Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer2.2.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.3.conv1 , Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer2.3.conv3 , Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.0.conv1 , Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.0.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer3.0.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.0.downsample.0 , Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
      "backbone.layer3.1.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.1.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.1.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.2.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.2.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.2.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.3.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.3.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.3.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.4.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.4.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.4.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.5.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.5.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.5.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.6.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.6.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.6.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.7.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.7.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.7.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.8.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.8.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.8.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.9.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.9.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.9.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.10.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.10.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.10.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.11.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.11.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.11.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.12.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.12.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.12.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.13.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.13.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.13.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.14.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.14.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.14.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.15.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.15.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.15.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.16.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.16.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.16.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.17.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.17.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.17.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.18.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.18.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.18.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.19.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.19.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.19.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.20.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.20.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.20.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.21.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.21.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.21.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.22.conv1 , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer3.22.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer3.22.conv3 , Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.0.conv1 , Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.0.conv2 , Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer4.0.conv3 , Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.0.downsample.0 , Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False)\n",
      "backbone.layer4.1.conv1 , Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.1.conv2 , Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer4.1.conv3 , Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.2.conv1 , Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer4.2.conv2 , Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer4.2.conv3 , Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "neck.lateral_convs.0.conv , Conv2d(256, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.lateral_convs.1.conv , Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.lateral_convs.2.conv , Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.lateral_convs.3.conv , Conv2d(2048, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.fpn_convs.0.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.1.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.2.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.3.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "rpn_head.rpn_conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "rpn_head.rpn_cls , Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
      "rpn_head.rpn_reg , Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n"
     ]
    }
   ],
   "source": [
    "###########################################################\n",
    "for name, m in model.named_modules():\n",
    "        if isinstance(m, nn.Conv2d):\n",
    "            print(name,',',m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "class GradCAM(object):\n",
    "    \"\"\"\n",
    "    1: 网络不更新梯度,输入需要梯度更新\n",
    "    2: 使用目标类别的得分做反向传播\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, net, layer_name):\n",
    "        self.net = net\n",
    "        self.layer_name = layer_name\n",
    "        self.feature = None\n",
    "        self.gradient = None\n",
    "        self.net.eval()\n",
    "        self.handlers = []\n",
    "        self._register_hook()\n",
    "\n",
    "    def _get_features_hook(self, module, input, output):\n",
    "        self.feature = output\n",
    "        # print(\"feature shape:{}\".format(output.size()))\n",
    "\n",
    "    def _get_grads_hook(self, module, input_grad, output_grad):\n",
    "        \"\"\"\n",
    "\n",
    "        :param input_grad: tuple, input_grad[0]: None\n",
    "                                   input_grad[1]: weight\n",
    "                                   input_grad[2]: bias\n",
    "        :param output_grad:tuple,长度为1\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.gradient = output_grad[0]\n",
    "        # print('gradient:', self.gradient)\n",
    "\n",
    "    def _register_hook(self):\n",
    "        for (name, module) in self.net.named_modules():\n",
    "            if name == self.layer_name:\n",
    "                self.handlers.append(module.register_forward_hook(self._get_features_hook))\n",
    "                self.handlers.append(module.register_backward_hook(self._get_grads_hook))\n",
    "#         module = self.net.rpn.head.bbox_pred\n",
    "#         self.handlers.append(module.register_forward_hook(self._get_features_hook))\n",
    "#         self.handlers.append(module.register_backward_hook(self._get_grads_hook))\n",
    "            \n",
    "                # print(self.handlers)\n",
    "\n",
    "    def remove_handlers(self):\n",
    "        for handle in self.handlers:\n",
    "            handle.remove()\n",
    "\n",
    "    def __call__(self, inputs, index=0):\n",
    "        \"\"\"\n",
    "\n",
    "        :param inputs: {\"image\": [C,H,W], \"height\": height, \"width\": width}\n",
    "        :param index: 第几个边框\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.net.zero_grad()\n",
    "        # output = self.net([inputs])\n",
    "        x = self.net.extract_feat(inputs['img'][0])\n",
    "        rpn_outs = self.net.rpn_head(x)\n",
    "        result_list = get_bboxes_tmp(rpn_outs,inputs['img_metas'],self.net.rpn_head.test_cfg)\n",
    "        res= self.net.roi_head.simple_test_bboxes(\n",
    "            x, inputs['img_metas'], result_list, self.net.roi_head.test_cfg, rescale=True)\n",
    "        # print(output)\n",
    "        score = res[0][0][index][4]\n",
    "        # proposal_idx = output[0]['labels'][index]  # box来自第几个proposal\n",
    "        # print(score)\n",
    "        score.backward()\n",
    "        # print('gradient:', self.gradient)\n",
    "\n",
    "        # gradient = self.gradient[proposal_idx].cpu().data.numpy()  # [C,H,W]\n",
    "        gradient = self.gradient.cpu().data.numpy().squeeze()\n",
    "        \n",
    "        weight = np.mean(gradient, axis=(1, 2))  # [C]\n",
    "\n",
    "        # feature = self.feature[proposal_idx].cpu().data.numpy()  # [C,H,W]\n",
    "        feature = self.feature.cpu().data.numpy().squeeze()\n",
    "\n",
    "        cam = feature * weight[:, np.newaxis, np.newaxis]  # [C,H,W]\n",
    "        # print(cam.shape)\n",
    "        cam = np.sum(cam, axis=0)  # [H,W]\n",
    "        cam = np.maximum(cam, 0)  # ReLU\n",
    "\n",
    "        # 数值归一化\n",
    "        cam -= np.min(cam)\n",
    "        cam /= np.max(cam)\n",
    "        # resize to 224*224\n",
    "        # box = output[0]['instances'].pred_boxes.tensor[index].detach().numpy().astype(np.int32)\n",
    "        box = res[0][0][index][:-1].detach().numpy().astype(np.int32)\n",
    "        x1, y1, x2, y2 = box\n",
    "        \n",
    "        # cam = cv2.resize(cam, (x2 - x1, y2 - y1))\n",
    "        # cam = cv2.resize(cam, (y2 - y1, x2 - x1)).T\n",
    "        # print(cam.shape)\n",
    "\n",
    "        # class_id = output[0]['instances'].pred_classes[index].detach().numpy()\n",
    "        class_id = res[1][0][index].detach().numpy()\n",
    "        plt.imshow(cam)\n",
    "        return cam, box, class_id"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "grad_cam = GradCAM(model, 'backbone.layer4.2.conv1')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mask, box, class_id = grad_cam(data[0],0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def norm_image(image):\n",
    "    \"\"\"\n",
    "    标准化图像\n",
    "    :param image: [H,W,C]\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    image = image.copy()\n",
    "    image -= np.max(np.min(image), 0)\n",
    "    image /= np.max(image)\n",
    "    image *= 255.\n",
    "    return np.uint8(image)\n",
    "\n",
    "def gen_cam(image, mask):\n",
    "    \"\"\"\n",
    "    生成CAM图\n",
    "    :param image: [H,W,C],原始图像\n",
    "    :param mask: [H,W],范围0~1\n",
    "    :return: tuple(cam,heatmap)\n",
    "    \"\"\"\n",
    "    # mask转为heatmap\n",
    "    heatmap = cv2.applyColorMap(np.uint8(255 * mask), cv2.COLORMAP_JET)\n",
    "    heatmap = np.float32(heatmap) / 255\n",
    "    heatmap = heatmap[..., ::-1]  # gbr to rgb\n",
    "\n",
    "    # 合并heatmap到原始图像\n",
    "    cam = heatmap + np.float32(image)\n",
    "    return norm_image(cam), heatmap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7f66b4fc2210>"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "image_dict = {}\n",
    "im = data[0]['img'][0].squeeze(0).permute(1,2,0)\n",
    "mask = cv2.resize(mask, (im.shape[1], im.shape[0]))\n",
    "image_cam, image_dict['heatmap'] = gen_cam(im, mask)\n",
    "plt.imshow(image_cam)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
